package movTeclado;

import java.math.*;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.Timer;

import Entidades.NaveEnemiga;

/**
 * Clase menteGoei
 * @author Jonathan Fritz - Santiago Salem - Kevin Schweitzer.
 */
public class menteGoei extends mente implements ActionListener {

	private Timer timer;
	private boolean hacer = true;
	private boolean extremoIzquierdo=false;

	@Override


	/**
	 * Finaliza la ejecucion de la mente.
	 */
	public void fin(){
		super.fin();
		timer.stop();
		hacer = false;
	}
	
	/**
	 * Realiza la accion de disparar.
	 * @param e, evento capturado.
	 */
	public void actionPerformed(ActionEvent e) {
	 Point pos = nave.getLocation();
	 if(pos.y > 0)
		 juego.dispararEnemigo(nave.getLocation(),(NaveEnemiga) nave);
 }

	/**
	 * Prepara la mente.
	 */
	public void preparar() {
		Random rd=new Random();
		int r=rd.nextInt(2);

		if (r==0)
			r= this.juego.getFrameJuego().getWidth()-nave.getWidth();
		else{
			r=0;
			extremoIzquierdo=true;
		}

		this.nave.setLocation(r, 0-this.nave.getHeight());	

		timer =  new Timer (4000, this);
		timer.start();
	}

	/**
	 * Lleva a cabo el funcionamiento de la mente.
	 */
	public void run() {


		try {
			menteGoei.sleep(50);
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		Point pos = this.nave.getLocation();

		int v,j;
		while(hacer) {

			while( pos.y<0  ) {
				try {
					menteGoei.sleep(100);
					v = pos.y + nave.getVelocidad();
					this.nave.setLocation( pos.x, v);
					pos = this.nave.getLocation();
					this.juego.getFrameJuego().repaint();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			int guardoX = pos.x;	
			boolean agregue = false;

			while( (pos.y < this.juego.getFrameJuego().getHeight() - this.nave.getHeight()) && (pos.x <= this.juego.getFrameJuego().getWidth()/*- this.nave.getWidth()*/) && (pos.x>=0) ) { //hasta que salga de pantalla

				try {
					menteGoei.sleep(150);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				if (((pos.y >0 && pos.y< juego.getFrameJuego().getHeight()) && (pos.x >0 && pos.x< juego.getFrameJuego().getWidth())) && !agregue){
					juego.getNavesEnPantalla().add((NaveEnemiga)nave);
					agregue = true;
				}
				
				
				
				
				//Mueve nave
				if(extremoIzquierdo){
					v = pos.y + nave.getVelocidad();
					j = pos.x + nave.getVelocidad();
				}
				else{
					v = pos.y + nave.getVelocidad();
					j = pos.x - nave.getVelocidad();
				}
				
			/*	if(j==133 && v==325){
					boolean hice=false;
					while(!hice){
						int aux=v;
						j=(int)Math.round( Math.sqrt(100-Math.pow(v,2)));
						v=(int)Math.round( Math.sqrt(100-Math.pow(aux,2)));
						
						if(j==133 && v==325)
							hice=true;
					}
					
				}*/
				
				this.nave.setLocation( j, v);
				pos = this.nave.getLocation();
				this.juego.getFrameJuego().repaint();	

			}
			juego.getNavesEnPantalla().remove(nave); //Cuando salgo elimino de lista en pantalla
			nave.setLocation(guardoX, -100); // La coloca arriba 
			pos = nave.getLocation();
		}
	}
}



